package com.xwj.coupon.user.repository.redis;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;

import java.util.Set;

/**
 * @Description TODO
 * @Author xwj
 * @Date 2025/8/17
 */
@Component
@Slf4j
public class UserCouponRedisDao {
//    private final ZSetOperations<String, Long> zSetOperations;
//
//    // 注入泛型为<String, Long>的RedisTemplate
//    public UserCouponRedisDao(RedisTemplate<String, Long> redisTemplate) {
//        this.zSetOperations = redisTemplate.opsForZSet();
//    }
//
//    /**
//     * 向ZSet中添加Long类型元素
//     * @param key 集合键名
//     * @param value Long类型元素值
//     * @param score 元素分数（用于排序）
//     * @return 是否添加成功
//     */
//    public Boolean addElement(String key, Long value, double score) {
//        // 确保value不为null
//        if (value == null) {
//            return false;
//        }
//        return zSetOperations.add(key, value, score);
//    }
//
//    /**
//     * 批量向ZSet中添加Long类型元素
//     * @param key 集合键名
//     * @param elements 包含Long元素和分数的集合
//     * @return 添加成功的元素数量
//     */
//    public Long addElements(String key, Set<ZSetOperations.TypedTuple<Long>> elements) {
//        if (elements == null || elements.isEmpty()) {
//            return 0L;
//        }
//        return zSetOperations.add(key, elements);
//    }
//
//    /**
//     * 从ZSet中删除指定的Long类型元素
//     * @param key 集合键名
//     * @param values 要删除的Long元素
//     * @return 删除成功的元素数量
//     */
//    public Long removeElements(String key, Long... values) {
//        if (values == null || values.length == 0) {
//            return 0L;
//        }
//        return zSetOperations.remove(key, (Object[]) values);
//    }
//
//    /**
//     * 按索引范围查询Long类型元素（升序）
//     * @param key 集合键名
//     * @param start 起始索引（0开始）
//     * @param end 结束索引（-1表示最后一个）
//     * @return 包含元素和分数的集合
//     */
//    public Set<ZSetOperations.TypedTuple<Long>> rangeByIndex(String key, long start, long end) {
//        return zSetOperations.rangeWithScores(key, start, end);
//    }
//
//    /**
//     * 按分数范围查询Long类型元素（升序）
//     * @param key 集合键名
//     * @param min 最小分数
//     * @param max 最大分数
//     * @return 包含元素和分数的集合
//     */
//    public Set<ZSetOperations.TypedTuple<Long>> rangeByScore(String key, double min, double max) {
//        return zSetOperations.rangeByScoreWithScores(key, min, max);
//    }
//
//    /**
//     * 查询Long元素的排名（升序，从0开始）
//     * @param key 集合键名
//     * @param value Long元素值
//     * @return 排名索引，不存在返回null
//     */
//    public Long rank(String key, Long value) {
//        if (value == null) {
//            return null;
//        }
//        return zSetOperations.rank(key, value);
//    }
//
//    /**
//     * 查询Long元素的分数
//     * @param key 集合键名
//     * @param value Long元素值
//     * @return 元素分数，不存在返回null
//     */
//    public Double score(String key, Long value) {
//        if (value == null) {
//            return null;
//        }
//        return zSetOperations.score(key, value);
//    }
//
//    /**
//     * 获取ZSet中元素的总数量
//     * @param key 集合键名
//     * @return 元素数量
//     */
//    public Long size(String key) {
//        return zSetOperations.size(key);
//    }
//
//    /**
//     * 删除指定分数范围内的元素
//     * @param key 集合键名
//     * @param min 最小分数
//     * @param max 最大分数
//     * @return 删除的元素数量
//     */
//    public Long removeRangeByScore(String key, double min, double max) {
//        return zSetOperations.removeRangeByScore(key, min, max);
//    }
}
